# include"mon_list.h"
node* init_list()
{

    node* head=(node*)malloc(sizeof(node));
    head->next=NULL;
    return head;

}

void create_list(node* head)
{
    ElemType x;
    node* p=head;
    printf("请输入第一个元素：\n");
    scanf("%d",&x);
    while(x!=-1)
    {
        node* q=(node*)malloc(sizeof(node));
        q->data=x;
        q->next=NULL;
        p->next=q;
        p=q;
        printf("请输入下一个元素：\n");
        scanf("%d",&x);
    }

}
void print_list(node* head)
{
    node* p=head->next;
    while(p)
    {
        printf("%d->",p->data);
        p=p->next;
    }
    printf("\n");
}

void destroy_list(node* head)
{
   node* p=head;
   while(p)
   {
      node* t=p->next;
      free(p);                                                                                
      p=t;
   }
}
void insert_list(node* head,ElemType x)
{
   node* q=(node*)malloc(sizeof(node));
   q->data=x;
   q->next=NULL;
   q->next=head->next;
   head->next=q;
}
void delete_list(node* head,ElemType x)
{
    node* p=head->next;
    node* q=head;
    while(p)
    {
         if(p->data==x)
         {
             p=p->next;
             q->next=p;
         }
         else
         {

             p=p->next;
             q=q->next;
         }
    }
}

void push_list(node* head,ElemType x)
{
    node* p=head;
    while(p->next!=NULL)
    {
        p=p->next;
    }
    node* q=(node*)malloc(sizeof(node));
    q->data=x;
    q->next=NULL;
    p->next=q;
}

void delete_pos_list(node* head,int x)
{
    node* p=head->next;
    node* q=head;
    int pos=1;
    while(p)
    {
        if(pos==x)
        {
            q->next=p->next;
            p=p->next;
        }
        else
        {
            p=p->next;
            q=q->next;
        }
        pos++;
    }

}

ElemType max_list(node* head)
{
    ElemType ret;
    node* p=head->next->next;
    ret=head->next->data;
    while(p)
    {
        if(p->data>ret)
        {
            ret=p->data;
        }
        p=p->next;
    }
    return ret;
}


void sort_list(node* head)//顺序
{
    int flag=1;
    while(flag)
    {
        flag=0;
        node* p=head->next;
        node* q=head->next->next;
        while(q)
        {

            if(p->data>q->data)
            {
                ElemType t=q->data;
                q->data=p->data;
                p->data=t;
                flag=1;
            }
            p=p->next;
            q=q->next;
        }

    }

}

void choice_sort_list(node* head)
{
    node* p=head;
    while(p)
    {
        p=p->next;
        node* q=p->next;
        while(q)
        {
            if(q->data<p->data)
            {
                ElemType temp=p->data;
                p->data=q->data;
                q->data=temp;
            }
            q=q->next;
        }
    }
}














